MongoDB-তে Aggregation অপারেশনগুলি অত্যন্ত শক্তিশালী এবং কার্যকরী, বিশেষ করে যখন আপনি বিভিন্ন ধরনের ডেটা প্রসেসিং (যেমন গোষ্ঠীভুক্তকরণ, ফিল্টারিং, Sorting, Joining) করতে চান। MongoDB-এর Aggregation Framework ব্যবহার করে আপনি জটিল কোয়্যারী করতে পারেন যা অনেক স্টেপ এবং অপারেশন জড়িত থাকে।
Java MongoDB Driver এর মাধ্যমে Aggregation Queries তৈরি ও বাস্তবায়ন করা যেতে পারে। এখানে, আমরা Complex Aggregation Query তৈরি এবং Java-তে বাস্তবায়ন করার পদ্ধতি দেখব।
MongoDB Aggregation Framework:
MongoDB-এর Aggregation Framework সাধারণত একটি পাইপলাইন পদ্ধতিতে কাজ করে। এই ফ্রেমওয়ার্কে $match, $group, $sort, $project, $unwind, এবং অন্যান্য অনেক স্টেপ ব্যবহার করা হয়।
Aggregation Pipeline Operators:
- $match: ডেটার মধ্যে ফিল্টারিং করে শুধুমাত্র নির্দিষ্ট ডকুমেন্টগুলো নির্বাচন করে।
- $group: ডেটাকে গ্রুপ করে এবং গোষ্ঠীভুক্ত ডেটার উপর ফাংশন (যেমন, COUNT, SUM, AVG) প্রয়োগ করে।
- $sort: ডেটাকে কোনো নির্দিষ্ট কন্ডিশনে সাজায়।
- $project: নির্দিষ্ট ফিল্ড বা ডেটার কাঠামো পরিবর্তন করে।
- $unwind: অ্যারে ডেটাকে একক ডকুমেন্টে রূপান্তরিত করে।
Complex Aggregation Query উদাহরণ:
ধরা যাক, আমাদের একটি students নামক কোলেকশন রয়েছে, যেখানে স্টুডেন্টদের তথ্য রাখা আছে। আমরা চাই এমন একটি complex aggregation query তৈরি করতে যা নিম্নলিখিত কাজ করবে:
- Age এর উপর ভিত্তি করে গ্রুপিং (যেমন, ছাত্রদের বয়সের মধ্যে গোষ্ঠী তৈরি করা)।
- প্রতিটি বয়সের জন্য ছাত্রদের গড় স্কোর বের করা।
- Grade এর উপর ভিত্তি করে সাজানো (যে গ্রেডে বেশি ছাত্র রয়েছে সেই গ্রেডটি প্রথমে দেখানো হবে)।
- শুধুমাত্র সেগুলি প্রদর্শন করা যাদের গড় স্কোর ৫০ এর উপরে।
MongoDB Aggregation Query (Mongo Shell):
db.students.aggregate([
{ $match: { score: { $gte: 50 } } }, // Filter students with score >= 50
{ $group: {
_id: "$age", // Grouping by age
avgScore: { $avg: "$score" }, // Calculating average score for each age group
count: { $sum: 1 } // Counting the number of students in each group
}},
{ $sort: { count: -1 } }, // Sorting by the number of students in each age group
{ $project: { _id: 0, age: "$_id", avgScore: 1, count: 1 } } // Projecting the required fields
])
Java MongoDB Code: Complex Aggregation Query বাস্তবায়ন:
এখন আমরা উপরের MongoDB অ্যাগ্রিগেশন কোয়্যারিটি Java-তে MongoDB Java Driver ব্যবহার করে বাস্তবায়ন করব।
Java Code:
import com.mongodb.MongoClient;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.Arrays;
public class ComplexAggregationExample {
public static void main(String[] args) {
// MongoClient তৈরি করা
MongoClient mongoClient = new MongoClient("localhost", 27017);
// ডেটাবেস নির্বাচন করা
MongoDatabase database = mongoClient.getDatabase("school");
// students কোলেকশন নির্বাচন করা
MongoCollection<Document> collection = database.getCollection("students");
// Aggregation Pipeline তৈরি করা
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
// Filter students with score >= 50
new Document("$match", new Document("score", new Document("$gte", 50))),
// Group by age, calculate average score and count the number of students
new Document("$group", new Document("_id", "$age")
.append("avgScore", new Document("$avg", "$score"))
.append("count", new Document("$sum", 1))),
// Sort by count in descending order
new Document("$sort", new Document("count", -1)),
// Project the required fields
new Document("$project", new Document("_id", 0)
.append("age", "$_id")
.append("avgScore", 1)
.append("count", 1))
));
// ফলাফল প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
// MongoClient বন্ধ করা
mongoClient.close();
}
}
ব্যাখ্যা:
- MongoClient: MongoDB সার্ভারে সংযোগ তৈরি করতে
MongoClientব্যবহার করা হয়েছে। - Aggregation Pipeline:
aggregate()মেথডের মধ্যেArrays.asList()ব্যবহার করে আমরা একাধিক স্টেপ (ম্যাচ, গ্রুপ, সাজানো, এবং প্রজেক্ট) সংজ্ঞায়িত করেছি। - $match:
scoreফিল্টার ব্যবহার করে আমরা এমন ছাত্রদের খুঁজে বের করেছি যাদের স্কোর ৫০ এর বেশি। - $group: ছাত্রদের
ageঅনুযায়ী গ্রুপিং করে, এবং প্রতি গ্রুপের গড় স্কোর এবং ছাত্র সংখ্যা গণনা করেছি। - $sort: ছাত্র সংখ্যা অনুযায়ী গ্রুপগুলো সাজানো হয়েছে।
- $project: আমরা শুধুমাত্র
age,avgScore, এবংcountফিল্ডগুলো প্রজেক্ট করেছি,_idবাদ দিয়েছি।
Output:
{"age":25,"avgScore":72.5,"count":10}
{"age":22,"avgScore":65.0,"count":8}
{"age":30,"avgScore":60.5,"count":5}
...
এখানে, ফলাফলটি বিভিন্ন বয়সের ভিত্তিতে ছাত্রদের গড় স্কোর এবং প্রতিটি বয়সের ছাত্রদের সংখ্যা দেখাচ্ছে। এটি MongoDB Aggregation Framework এর মাধ্যমে জটিল ডেটা প্রসেসিং এবং বিশ্লেষণ করার একটি উদাহরণ।
MongoDB-এর Aggregation Framework একটি অত্যন্ত শক্তিশালী টুল যা বিভিন্ন জটিল ডেটা বিশ্লেষণ এবং প্রসেসিংয়ের জন্য ব্যবহৃত হয়। Java MongoDB Driver দিয়ে complex aggregation queries বাস্তবায়ন করা খুবই সহজ, যেখানে $match, $group, $sort, $project, $unwind ইত্যাদি স্টেপগুলো ব্যবহার করে ডেটা চমৎকারভাবে প্রসেস এবং বিশ্লেষণ করা যায়। MongoDB-এর এই ক্ষমতা Java অ্যাপ্লিকেশনগুলিতে ডেটা স্টোরেজ এবং বিশ্লেষণের জন্য অনেক কার্যকরী হয়ে ওঠে।
Read more